import { removeToken, getToken, setToken } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user'

// 共享的数据,定义一个变量存储数据2.++++++++++++++++++++
const state = () => ({
  token: getToken() || null, // 用户 Token，默认为 null
  userInfo: {} // 用户信息 , userInfo，保存用户信息,
})

// 点击登录后要把token存到vuex
const mutations = {
  // 对token进行赋值.写好后将这个放到组件中进行调用
  setToken(state, newToken) { // newToken是用户传过来的
    state.token = newToken
    setToken(newToken)
  },
  removeToken(state) { // 移除token
    state.token = null
    removeToken()
  },
  // -----------------------------
  //   设置用户信息的方法,把传入的信息给state.userInfo3.+++++++++++++++++++
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 删除用户信息的方法
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

// +++++++++++++++++++++4
const actions = {
  // 用户退出================后在组件中直接使用=====================
  userLogout(context) {
    //   清除token
    context.commit('removeToken')
    // 清除用户的信息
    context.commit('removeUserInfo')
  },

  // 用来获取用户信息的方法
  async  getUserInfo(context) {
    // 调用上边的方法是一个异步的
    const res = await getUserInfo()
    // console.log(res)
    const detailInfo = await getUserDetailById(res.data.userId)// 后台返回的个人信息(头像)

    context.commit('setUserInfo', { ...res.data, ...detailInfo.data })// 两个数据合并
    // console.log(detailInfo)
  },
  //   --------------token------------------
  async userLogin(context, data) {
    const res = await login(data)// res是返回的对象
    context.commit('setToken', res.data)// commit是mutations的调用语法
  }

}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

